package com.sxj.corejava.code09_集合.List集合;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

/**
 * @author 石小俊
 * @date 2024年04月24日 14:43
 */
public class Test03_遍历方式 {

    public static void main(String[] args) {
        test03();
    }

    public static void test01() {
        List<Integer> list = new ArrayList<>(Arrays.asList(1, 3, 4, 6, 7, 9));
        System.out.println(list);
//        for (int i = 0; i < list.size(); i++) {
////            System.out.print(list.get(i)+"\t");
//            // 删除索引为偶数的元素
//            if(i % 2 == 0){
//                // 此时的操作存在问题
//                // 当删除了某个元素之后,其他元素的索引会随之改变
//                // 因此,此时无法实现删除所有偶数索引的元素
//                // 只能考虑如何遍历才能导致索引号不受影响?
//                // 倒序
//                list.remove(i);
//            }
//        }


        for (int i = list.size() - 1; i >= 0; i--) {
            if (i % 2 == 0) {
                list.remove(i);
            }
        }
        System.out.println(list);
    }

    public static void test02() {
        List<Integer> list = new ArrayList<>(Arrays.asList(1, 3, 4, 5, 6, 8));
        for (Integer num : list) {
            System.out.print(num + "\t");
            // 对于增强for循环,只能正序,不能倒序
            // 在增强for循环中,不能实现添加或者删除操作
            // 如果出现添加或者删除操作,会抛出ConcurrentModificationException异常
//            list.add(10);
//            list.remove(2);
            list.set(2, 2);
        }

    }

    public static void test03() {
        List<Integer> list = new ArrayList<>(Arrays.asList(1, 4, 6, 7, 8, 9));
        // 将集合中所有的元素放入到迭代器中,专门用于处理遍历操作
        Iterator<Integer> it = list.iterator();
        // 遍历时可以判断迭代器中是否存在元素,如果存在则可以遍历
        // 直到没有元素为止
        // hasNext():表示判断迭代器中是否存在元素
        // 如果仍有元素可以迭代，则返回 true
        while (it.hasNext()) {
            // next():返回迭代器中的下一个元素,即:即将迭代的元素是谁
            Integer num = it.next();
            System.out.print(num + "\t");
            // 删除所有偶数的元素
            if (num % 2 == 0) {
                // 不能直接在集合中添加或者删除元素
//                list.add(1);
//                list.remove(num);
                // 迭代器中提供了删除的方法,可以用于删除迭代器中指定的元素
                // 迭代器中元素被删除后,集合中的元素同步被删除
                // 删除当前迭代的元素
                it.remove();
            }
        }
        System.out.println();
        System.out.println(list);
    }
}
